헤더 파일
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
헤더 파일은 C/C++ 프로그래밍에서 함수, 객체, 데이터형 등의 선언을 포함하여 코드 중복과 유지보수 문제를 해결하기 위해 사용되는 파일이다. 헤더 파일은 `#include` 지시어를 통해 소스 파일에 포함되며, 함수 선언, 매크로 정의, 구조체, 클래스 선언 등을 포함한다. C/C++에서는 헤더 파일 중복 포함을 방지하기 위해 `#ifndef`, `#define`, `#endif` 전처리기를 사용하며, 다른 프로그래밍 언어에서는 패키지나 모듈 시스템을 통해 비슷한 기능을 제공한다.
더 읽어볼만한 페이지
- C 프로그래밍 언어 - C (프로그래밍 언어)
C는 하드웨어 제어와 이식성이 뛰어난 고급 절차적 프로그래밍 언어로서, 다양한 분야에서 사용되며 후속 언어에 영향을 주었고, 성능과 효율성이 높지만 안전성 문제 개선이 필요한 언어이다. - C 프로그래밍 언어 - C99
C99는 1999년 ISO/IEC 9899:1999로 출판된 C 프로그래밍 언어의 표준으로, 인라인 함수, 가변 길이 배열, `//` 주석 등 새로운 기능들을 추가하고 IEEE 부동소수점 자료 지원을 개선했으며 C90과 하위 호환성을 가지면서 C++와의 호환성을 고려했다. - 소스 코드 - 헝가리안 표기법
헝가리안 표기법은 변수 이름에 데이터 타입이나 목적을 나타내는 접두사를 붙이는 명명 규칙으로, 찰스 시모니가 고안하여 마이크로소프트에서 널리 사용되었으나, 코드 가독성 향상에 대한 유용성 논란과 함께 최신 IDE 환경에서는 불필요하다는 비판도 있다. - 소스 코드 - 의사코드
의사코드는 컴퓨터 과학 및 수치 계산 분야에서 알고리즘을 설명하기 위해 사용되는 비표준적인 언어로, 자연어와 프로그래밍 언어의 요소를 혼합하여 알고리즘의 논리적 흐름을 이해하기 쉽게 하고 프로그래머가 실제 코드로 구현하기 전에 알고리즘을 설계하고 검토하는 데 유용하다. - C++ - 소멸자 (컴퓨터 프로그래밍)
소멸자는 객체가 메모리에서 제거되기 직전에 호출되는 멤버 함수로, 객체 자원 해제 및 정리 작업을 수행하며, C++ 등 여러 언어에서 구현되고 메모리 누수 방지에 기여한다. - C++ - C++/CLI
C++/CLI는 .NET 환경에서 관리 코드와 네이티브 코드의 혼합 사용을 위해 C++ 언어를 확장한 것으로, .NET 객체 생성, 핸들, 추적 참조 등의 구문을 제공하며 C# 등 다른 .NET 언어와의 상호 운용성을 지원한다.
헤더 파일 |
---|
2. 역사적 배경
초기 C/C++ 프로그래밍에서는 함수 선언을 각 소스 파일에서 개별적으로 관리해야 했다. 예를 들어, 어떤 소스 파일에 다음과 같은 함수가 정의되어 있다고 가정한다.
C/C++에서 헤더 파일은 함수 선언, 매크로 정의, 구조체, 클래스 선언 등을 포함한다.
```c
int add(int a, int b)
{
return a + b;
}
```
이 함수를 다른 소스 파일에서 참조하려면 함수 프로토타입으로 선언해야 한다. 따라서 다음과 같다.
```c
extern int add(int, int);
int triple(int x)
{
return add(x, add(x, x));
}
```
그러나 이 방식으로는 프로그래머가 `add` 함수의 선언을 구현 파일과 사용하는 파일 두 곳에서 관리해야 했다. 함수의 정의가 변경되면, 프로그래머는 프로그램 곳곳에 있는 모든 함수 프로토타입을 업데이트해야 했다.
헤더 파일은 이 문제를 해결한다. 모듈화된 헤더 파일은 해당 모듈이 외부에 공개하는 함수, 객체, 데이터형 등의 선언을 포함한다. 예를 들어, 위 예시에서 헤더 파일에 `add`의 선언이 포함될 것이다. `add`를 사용하는 각 소스 파일에서는 `#include` 지시어를 사용하여 해당 헤더 파일을 가져온다.
```c
#ifndef H_ADD
#define H_ADD
extern int add(int, int);
#endif
```
```c
#include "add.h"
int triple(int x)
{
return add(x, add(x, x));
}
```
이렇게 하면 유지보수 부담이 줄어든다. 정의가 변경된 경우, 헤더 파일의 선언만 업데이트하면 된다 (변경 내용에 따라서는 그것만으로는 안 되는 경우도 있다). 헤더 파일은 그 안에서 선언된 것의 실체가 정의되어 있는 소스 파일에도 포함되는 경우가 있다. 이렇게 하면 컴파일러가 정의와 선언이 일관성이 있는지 확인할 수 있다.
```c
#include "add.h"
int add(int a, int b)
{
return a + b;
}
3. C/C++ 헤더 파일 사용 예
C 언어에서 `printf` 함수는 `stdio.h` 표준 라이브러리에 존재하며, 다음과 같이 사용한다.[1]
```c
#include
int main(int argc, char *argv[])
{
printf("출력 함수 사용 예\n");
return 0;
}
```
`printf` 함수의 코드는 라이브러리 파일에 존재하고, `stdio.h` 헤더 파일에 함수의 형(type)이 선언되어 있다.[1]
일반적인 헤더 파일, 실시간 함수, 메인 함수를 포함하는 예시는 다음과 같다.헤더 파일 실시간 함수 메인 함수
헤더 파일은 주로 형(type)을 알리는 코드를 포함한다. 프로세서 실행 시 변수 공간을 할당하는 코드는 중복으로 인해 문제가 발생할 수 있으므로 주의해야 한다. 헤더 파일은 여러 파일에서 중복으로 포함(`include`)되어 사용되는 것이 일반적이기 때문이다.[1]
C/C++에서 형(type)을 알리는 대표적인 코드로는 `#define`, `enum`, `struct` 헤더 부, 클래스 선언 부, 함수 형 등이 있으며, 이러한 요소들은 헤더 파일에 포함하는 것이 일반적이다.[1]
다음은 변수 선언을 헤더 파일에 포함한, 적절하지 못한 헤더 파일 사용 예시이다.헤더 파일 실시간 함수 메인 함수
최근 많은 프로그래밍 언어에서는 프로그램을 서브루틴과 같은 작은 구성 요소로 분할하고, 각 서브루틴을 여러 개의 물리적으로 분할된 파일에 배치하여 개별적으로 컴파일한다. 어떤 서브루틴이 외부 파일에 정의된 요소를 사용하는 경우, 전방 선언이나 함수 프로토타입과 같은 개념을 도입해야 한다.[1]
예를 들어, 다음과 같이 함수가 정의되어 있다고 가정한다.
```c
int add(int a, int b)
{
return a + b;
}
```
이 함수를 다른 소스 파일에서 참조하려면 함수 프로토타입으로 선언해야 한다.
```c
extern int add(int, int);
int triple(int x)
{
return add(x, add(x, x));
}
```
그러나 이 방식은 프로그래머가 `add` 함수의 선언을 함수 정의와 함수 사용의 두 곳에서 관리해야 하는 문제가 있다. 함수의 정의가 변경되면, 프로그래머는 프로그램 전체에서 함수 프로토타입을 모두 업데이트해야 한다.[1]
헤더 파일은 이 문제를 해결한다. 모듈화된 헤더 파일은 해당 모듈이 외부에 공개하는 함수, 객체, 데이터형 등의 선언을 포함한다. 예를 들어, 위 예시에서는 헤더 파일에 `add` 함수의 선언이 포함된다. `add` 함수를 사용하는 각 소스 파일에서는 `#include` 지시어를 사용하여 헤더 파일을 포함한다.[1]
```c
#ifndef H_ADD
#define H_ADD
extern int add(int, int);
#endif
```
```c
#include "add.h"
int triple(int x)
{
return add(x, add(x, x));
}
```
이렇게 하면 유지 보수 부담이 줄어든다. 정의가 변경된 경우, 헤더 파일의 선언만 업데이트하면 된다. 헤더 파일은 선언된 요소의 실제 정의가 있는 소스 파일에도 포함되는 경우가 있다. 이를 통해 컴파일러는 정의와 선언의 일관성을 확인할 수 있다.[1]
```c
#include "add.h"
int add(int a, int b)
{
return a + b;
}
```
일반적으로 헤더 파일은 인터페이스만 제공하며, 선언된 구성 요소의 사용법을 설명하는 문서를 (주석 등으로) 포함하는 경우가 많다. 위 예시에서 서브루틴의 구현은 다른 소스 파일에 있으며, 개별적으로 컴파일된다. C 언어 및 C++에서는 인라인 함수가 예외인데, 많은 구현에서 인라인 함수 전개는 컴파일 시 정의가 없으면 불가능하기 때문이다.[1]
3. 1. 표준 라이브러리 함수 사용
C 언어에서 `printf` 함수와 같이 표준 라이브러리 함수를 사용하려면 해당 함수가 선언된 헤더 파일을 포함해야 한다. `printf` 함수는 `stdio.h`에 선언되어 있으므로, `#include
3. 1. 1. 예제 코드
C 언어에서 `printf` 함수를 사용하는 예는 다음과 같다. `printf` 함수는 `stdio.h` 표준 라이브러리에 존재한다.[1]
```c
#include
int main(int argc, char *argv[])
{
printf("출력 함수 사용 예\n");
return 0;
}
```
`printf` 함수의 코드는 라이브러리 파일에 존재하고, `stdio.h` 헤더 파일에 함수의 형(type)이 선언되어 있다.[1]
일반적인 헤더 파일, 실시간 함수, 메인 함수를 포함하는 예시는 다음과 같다.
헤더 파일 | 실시간 함수 | 메인 함수 |
---|---|---|
헤더 파일은 주로 형(type)을 알리는 코드를 포함한다. 프로세서 실행 시 변수 공간을 할당하는 코드는 중복으로 인해 문제가 발생할 수 있다. 헤더 파일은 여러 파일에서 중복으로 포함(`include`)되어 사용되는 것이 일반적이기 때문이다.[1]
형(type)을 알리는 C/C++ 코드로는 `#define`, `enum`, `struct` 헤더 부, 클래스 선언 부, 함수 형 등이 대표적이다. 이러한 요소들은 헤더 파일에 포함하는 것이 일반적이다. 변수 선언은 C/C++ 언어 자체에서는 문제가 없지만, 복잡한 프로그램에서는 혼동을 야기할 수 있으므로 주의해야 한다.[1]
다음은 적절하지 못한 헤더 파일 사용 예시이다.
헤더 파일 | 실시간 함수 | 메인 함수 |
---|---|---|
최근 많은 프로그래밍 언어에서는 프로그램을 서브루틴과 같은 작은 구성 요소로 분할하고, 각 서브루틴을 여러 개의 물리적으로 분할된 파일에 배치하여 개별적으로 컴파일한다. 어떤 서브루틴이 외부 파일에 정의된 요소를 사용하는 경우, 전방 선언이나 함수 프로토타입과 같은 개념을 도입해야 한다.[1]
예를 들어, 다음과 같이 함수가 정의되어 있다고 가정한다.
```c
int add(int a, int b)
{
return a + b;
}
```
이 함수를 다른 소스 파일에서 참조하려면 함수 프로토타입으로 선언해야 한다.
```c
extern int add(int, int);
int triple(int x)
{
return add(x, add(x, x));
}
```
그러나 이 방식은 프로그래머가 `add` 함수의 선언을 두 곳(함수 정의, 함수 사용)에서 관리해야 하는 문제가 있다. 함수의 정의가 변경되면, 프로그래머는 프로그램 전체에서 함수 프로토타입을 모두 업데이트해야 한다.[1]
헤더 파일은 이 문제를 해결한다. 모듈화된 헤더 파일은 해당 모듈이 외부에 공개하는 함수, 객체, 데이터형 등의 선언을 포함한다. 예를 들어, 위 예시에서는 헤더 파일에 `add` 함수의 선언이 포함된다. `add` 함수를 사용하는 각 소스 파일에서는 `#include` 지시어를 사용하여 헤더 파일을 포함한다.[1]
```c
#ifndef H_ADD
#define H_ADD
extern int add(int, int);
#endif
```
```c
#include "add.h"
int triple(int x)
{
return add(x, add(x, x));
}
```
이렇게 하면 유지 보수 부담이 줄어든다. 정의가 변경된 경우, 헤더 파일의 선언만 업데이트하면 된다. 헤더 파일은 선언된 요소의 실제 정의가 있는 소스 파일에도 포함되는 경우가 있다. 이를 통해 컴파일러는 정의와 선언의 일관성을 확인할 수 있다.[1]
```c
#include "add.h"
int add(int a, int b)
{
return a + b;
}
```
일반적으로 헤더 파일은 인터페이스만 제공하며, 선언된 구성 요소의 사용법을 설명하는 문서를 (주석 등으로) 포함하는 경우가 많다. 위 예시에서 서브루틴의 구현은 다른 소스 파일에 있으며, 개별적으로 컴파일된다. C 언어 및 C++에서는 인라인 함수가 예외인데, 많은 구현에서 인라인 함수 전개는 컴파일 시 정의가 없으면 불가능하기 때문이다.[1]
3. 2. 사용자 정의 헤더 파일
여러 소스 파일에서 함수, 변수, 구조체 등을 공유하려면 사용자 정의 헤더 파일에 선언하여 재사용할 수 있다. 프로그래밍 언어에서 프로그램은 서브루틴처럼 작은 구성 요소로 분할되고, 각 서브루틴은 여러 개의 물리적으로 분할된 파일에 배치되어 개별적으로 컴파일된다. 어떤 서브루틴이 해당 파일 외부에 정의된 것을 사용하려면, 전방 선언이나 함수 프로토타입 같은 개념을 도입해야 한다.[1]하지만 이 방법은 함수 선언을 구현 파일과 사용 파일 두 곳에서 관리해야 하는 문제가 있다. 함수 정의가 변경되면 프로그래머는 프로그램 곳곳의 함수 프로토타입을 모두 수정해야 한다.[1]
헤더 파일은 이 문제를 해결한다. 모듈화된 헤더 파일은 해당 모듈이 외부에 공개하는 함수, 객체, 데이터형 등을 선언한다. 예를 들어 `add` 함수를 사용하는 각 소스 파일에서는 `#include` 지시어를 사용하여 해당 헤더 파일을 포함함으로써 유지보수 부담을 줄일 수 있다.[1]
일반적으로 헤더 파일은 인터페이스만 제시하고, 선언된 구성 요소의 사용법을 설명하는 주석 등을 포함하는 경우가 많다. C/C++에서는 인라인 함수가 예외인데, 많은 구현에서 인라인 함수 전개는 컴파일 시점에 정의가 없으면 불가능하기 때문이다.[1]
헤더 파일은 주로 형을 알리는 코드를 포함하며, 여러 파일에서 중복으로 포함될 수 있으므로 프로세서 실행 시 변수 공간을 할당하는 코드는 중복되어 문제를 일으킬 수 있다.[1]
주로 헤더 파일에 포함되는 C/C++ 코드[1]는 다음과 같다.
- `#define`
- `enum`
- `struct` 헤더 부
- 클래스 선언 부
- 함수 형
변수 선언은 C/C++ 언어 상으로는 헤더 파일에 포함해도 문제없지만, 코드 복잡성이 증가하면 혼란을 야기할 수 있으므로 주의해야 한다.[1]
3. 2. 1. 예제 코드
C 언어에서 `printf` 함수를 사용하는 예시는 다음과 같다.[1]```c
#include
int main(int argc, char *argv[])
{
printf("출력 함수 사용 예\n");
return 0;
}
```
`printf` 함수의 코드는 라이브러리 파일에 존재하고, `stdio.h` 헤더 파일에 함수의 형(type)이 선언되어 있다.[1]
일반적인 헤더 파일, 실시간 함수, 메인 함수를 포함하는 예시는 다음과 같다.
헤더 파일 | 실시간 함수 | 메인 함수 |
---|---|---|
헤더 파일은 주로 형을 알리는 코드를 포함한다. 프로세서 실행 시 변수 공간을 할당하는 코드는 중복될 수 있어 문제를 일으킬 수 있다. 헤더 파일은 여러 파일에서 중복으로 포함될 수 있기 때문이다.[1]
헤더 파일에 주로 포함되는 C/C++ 코드[1]:
- `#define`
- `enum`
- `struct` 헤더 부
- 클래스 선언 부
- 함수 형
변수 선언은 헤더 파일에서 C/C++ 언어 상으로는 문제가 없지만, 코드 복잡성 증가에 따라 혼란을 야기할 수 있으므로 주의해야 한다.[1]
다음은 적절하지 못한 헤더 파일 사용 예시이다.
헤더 파일 | 실시간 함수 | 메인 함수 |
---|---|---|
많은 프로그래밍 언어에서 프로그램은 서브루틴과 같은 작은 구성 요소로 분할되며, 각 서브루틴은 여러 개의 물리적으로 분할된 파일에 배치되어 개별적으로 컴파일된다. 어떤 서브루틴이 해당 파일 외부에 정의된 것을 사용하는 경우, 전방 선언이나 함수 프로토타입과 같은 개념을 도입해야 한다. 예를 들어 다음과 같은 함수가 정의되어 있다고 가정한다.[1]
```c
int add(int a, int b)
{
return a + b;
}
```
다른 소스 파일에서 이 함수를 참조하려면 함수 프로토타입으로 선언해야 한다.[1]
```c
extern int add(int, int);
int triple(int x)
{
return add(x, add(x, x));
}
```
그러나 이 방법은 `add` 함수의 선언을 두 곳에서 관리해야 하는 문제가 있다. 함수의 정의가 변경되면 프로그래머는 프로그램 곳곳의 함수 프로토타입을 모두 업데이트해야 한다.[1]
헤더 파일은 이 문제를 해결한다. 모듈화된 헤더 파일은 해당 모듈이 외부에 공개하는 함수, 객체, 데이터형 등의 선언을 한다. 예를 들어, 위 예시에서는 헤더 파일에 `add`의 선언이 포함된다. `add`를 사용하는 각 소스 파일에서는 `#include` 지시어를 사용하여 헤더 파일을 가져온다.[1]
```c
#ifndef H_ADD
#define H_ADD
extern int add(int, int);
#endif
```
```c
#include "add.h"
int triple(int x)
{
return add(x, add(x, x));
}
```
이렇게 하면 유지 보수 부담이 줄어든다. 정의가 변경된 경우 헤더 파일의 선언만 업데이트하면 된다(변경 내용에 따라서는 추가적인 업데이트가 필요할 수 있다). 헤더 파일은 선언된 것의 실체가 정의되어 있는 소스 파일에도 포함되는 경우가 있다. 이를 통해 컴파일러는 정의와 선언의 일관성을 확인할 수 있다.[1]
```c
#include "add.h"
int add(int a, int b)
{
return a + b;
}
```
일반적으로 헤더 파일은 인터페이스만 제시하며, 선언된 구성 요소의 사용법을 설명하는 문서를 (주석 등으로) 포함하는 경우가 많다. 위 예시에서 서브루틴의 구현은 다른 소스 파일에 있으며, 개별적으로 컴파일된다. C 언어 및 C++에서의 예외로 인라인 함수가 있다. 많은 구현에서 인라인 함수의 전개는 컴파일 시 정의가 없으면 할 수 없는 경우가 많기 때문이다.[1]
3. 3. 헤더 파일 포함 중복 방지
헤더 파일이 여러 번 포함되는 것을 방지하기 위해 `#ifndef`, `#define`, `#endif` 전처리기 지시어를 사용한다. 이를 포함 보호(Include Guard)라고 한다.일반적으로 모듈화된 헤더 파일은 해당 모듈이 외부에 공개하는 개별 함수, 객체, 데이터형 등의 선언을 포함한다. 예를 들어, `add` 함수의 선언은 다음과 같이 헤더 파일에 포함될 수 있다.
```c
#ifndef H_ADD
#define H_ADD
extern int add(int, int);
#endif
```
`add` 함수를 사용하는 각 소스 파일에서는 `#include` 지시어를 사용하여 해당 헤더 파일을 도입한다.
```c
#include "add.h"
int triple(int x)
{
return add(x, add(x, x));
}
```
이렇게 하면 유지 보수 부담이 줄어든다. 정의가 변경된 경우, 헤더 파일에 있는 선언만 업데이트하면 되기 때문이다.
3. 4. 올바른 헤더 파일 사용
C 언어에서 많이 사용하는 `printf` 함수는 `stdio.h` 표준 라이브러리에 존재한다.[1]```c
#include
int main(int argc, char *argv[])
{
printf("출력 함수 사용 예\n");
return 0;
}
```
여기서 실시간 라이브러리 함수 `printf` 코드는 라이브러리 파일에 존재하고, `stdio.h` 헤더 파일에 형이 선언되어 있다.
헤더 파일의 가장 일반적인 형태는 다음과 같다.
헤더 파일 | 실시간 함수 | 메인 함수 |
---|---|---|
헤더 파일에서는 형을 알리는 코드를 사용하는 것이 일반적이다. 프로세서가 실행될 때 변수 공간을 잡는 형태는 중복되어 문제가 발생할 수 있다. 헤더 파일은 여러 파일에서 중복으로 인클루드되어 사용되는 것이 일반적이기 때문이다.
C/C++에서 형을 알리는 대표적인 코드들은 다음과 같다.
- `#define`
- `enum`
- `struct` 헤더 부
- 클래스 선언 부
- 함수 형
일반적으로 위와 같은 코드들은 헤더 파일에 포함한다. C/C++ 언어에서 헤더 파일에 변수를 선언하는 것은 문법적으로 문제가 없지만, 복잡한 프로그램에서는 혼동을 야기할 수 있으므로 올바른 헤더 파일 사용 습관을 숙지하는 것이 필요하다.
최근 많은 프로그래밍 언어에서는 프로그램을 서브루틴과 같은 작은 구성 요소로 분할하고, 각 서브루틴을 여러 개의 물리적으로 분할된 파일에 배치하여 개별적으로 컴파일한다. 어떤 서브루틴이 해당 파일 외부에 정의된 요소를 사용하는 경우, 전방 선언이나 함수 프로토타입과 같은 개념을 도입해야 한다. 예를 들어, 어떤 소스 파일에 다음과 같이 함수가 정의되어 있다고 가정한다.
```c
int add(int a, int b)
{
return a + b;
}
```
이 함수를 다른 소스 파일에서 참조하려면 함수 프로토타입으로 선언해야 한다.
```c
extern int add(int, int);
int triple(int x)
{
return add(x, add(x, x));
}
```
그러나 이 방식은 프로그래머가 `add` 함수의 선언을 구현 파일과 사용 파일, 두 곳에서 관리해야 한다는 단점이 있다. 함수의 정의가 변경되면 프로그래머는 프로그램 곳곳에 있는 모든 함수 프로토타입을 업데이트해야 한다.
헤더 파일은 이러한 문제를 해결한다. 모듈화된 헤더 파일은 해당 모듈이 외부에 공개하는 함수, 객체, 데이터형 등의 선언을 포함한다. 예를 들어, 위 예시에서는 헤더 파일에 `add` 함수의 선언을 포함할 수 있다. `add` 함수를 사용하는 각 소스 파일에서는 `#include` 지시어를 사용하여 해당 헤더 파일을 가져온다.
```c
#ifndef H_ADD
#define H_ADD
extern int add(int, int);
#endif
```
```c
#include "add.h"
int triple(int x)
{
return add(x, add(x, x));
}
```
이렇게 하면 유지 보수 부담이 줄어든다. 정의가 변경된 경우 헤더 파일의 선언만 업데이트하면 된다. (변경 내용에 따라 추가적인 수정이 필요할 수 있다.) 헤더 파일은 그 안에서 선언된 것의 실체가 정의되어 있는 소스 파일에도 포함되는 경우가 있다. 이를 통해 컴파일러는 정의와 선언의 일관성을 확인할 수 있다.
```c
#include "add.h"
int add(int a, int b)
{
return a + b;
}
```
일반적으로 헤더 파일은 인터페이스만 제시하는 데 사용되며, 선언된 구성 요소의 사용법을 설명하는 문서를 (주석 등으로) 포함하는 경우가 많다. 위 예시에서 서브루틴의 구현은 다른 소스 파일에 있으며, 개별적으로 컴파일된다. C 언어 및 C++에서 인라인 함수는 예외적인 경우이다. 많은 구현에서 인라인 함수 전개는 컴파일 시점에 정의가 필요하기 때문이다.
3. 4. 1. 부적절한 헤더 파일 사용 예
C/C++에서 헤더 파일에 변수를 선언하는 것은 문법적으로 가능하지만, 권장되지 않는 방식이다. 다음은 부적절한 헤더 파일 사용 예시이다.헤더 파일 | 실시간 함수 | 메인 함수 |
---|---|---|
위 예시에서 `MyFunc.h` 헤더 파일은 전역 변수 `gbuff`를 선언하고 있다. 이러한 방식은 여러 소스 파일에서 `MyFunc.h`를 포함할 경우 `gbuff` 변수가 중복 정의되어 링크 오류를 발생시킬 수 있다. 헤더 파일에는 일반적으로 다음과 같은 선언만 포함하는 것이 좋다.
- `#define`
- `enum`
- `struct` 헤더 부
- 클래스 선언 부
- 함수 형
변수 선언은 소스 파일에 작성하고, 헤더 파일에는 `extern` 키워드를 사용하여 외부 변수임을 알리는 것이 일반적인 방법이다.
4. 다른 프로그래밍 언어에서의 접근 방법
자바 등의 언어에서는 헤더 파일을 사용하지 않고, 패키지를 통해 컴파일러가 필요한 선언을 파악할 수 있도록 한다.[1] 모듈이라는 명칭으로 비슷한 기능을 제공하는 언어도 있으며, C++에서도 모듈 구조가 제안되어 헤더 파일을 대체할 가능성이 있다.[1]
참조
[1]
문서
C11 standard, 7.1.2 Standard headers
[2]
웹사이트
A Module System for C++ (Revision 4)
http://www.open-std.[...]
JTC1/SC22/WG21 - The C++ Standards Committee
2016-02-15
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com